Skip to content

Lung-Yu/course-code-vulnerability

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OWASP Top 10 2025 RC1 教學示範應用程式

⚠️ 警告:此應用程式包含刻意設計的安全漏洞,僅供教學使用!請勿在生產環境中使用!

專案說明

這是一個用於教學 OWASP Top 10 2025 RC1 網頁應用程式安全風險的示範專案。每個漏洞都有對應的程式碼、API 端點和攻擊腳本。

📋 版本說明: 本專案已從 OWASP Top 10 2021 升級至 2025 RC1 版本。詳見 版本對照表

技術堆疊

  • Java 17
  • Spring Boot 3.2.0
  • Spring Security (刻意設定不安全)
  • Spring Data JPA
  • Thymeleaf + Bootstrap 5
  • Log4j 2.14.1 (包含 CVE-2021-44228)
  • MySQL 8.0 / H2 Database
  • Docker & Docker Compose

OWASP Top 10 2025 RC1 涵蓋範圍

編號 風險名稱 實作位置 2021 對照
A01 Broken Access Control VulnerableAccessControlService, UserController, AdminController, VulnerableUrlFetcher (SSRF) A01 + A10:2021 合併
A02 Security Misconfiguration VulnerableXmlParser, SecurityConfig, WebConfig A05:2021 ⬆️
A03 Software Supply Chain Failures VulnerableDependencyLoader, VulnerablePackageVerifier A06:2021 擴展 🆕
A04 Cryptographic Failures VulnerableCryptoService A02:2021 ⬇️
A05 Injection VulnerableUserRepository, VulnerableCommandExecutor A03:2021 ⬇️
A06 Insecure Design FileController A04:2021 ⬇️
A07 Authentication Failures VulnerableSessionManager A07:2021
A08 Software/Data Integrity VulnerableDeserializer A08:2021
A09 Logging & Alerting Failures VulnerableAuditLogger A09:2021(強調 Alerting)
A10 Mishandling Exceptional Conditions VulnerableExceptionHandler, VulnerableFailOpenAuth 全新類別 🆕

快速開始

使用 Docker (建議)

# 建置並啟動
docker-compose up --build

# 開啟瀏覽器
open http://localhost:8080

本地開發

# 建置專案
./mvnw clean package -DskipTests

# 執行 (使用 H2 資料庫)
./mvnw spring-boot:run -pl owasp-demo-web

存取端點

端點 說明
http://localhost:8080 主應用程式
http://localhost:8080/swagger-ui.html API 文件
http://localhost:8080/h2-console H2 資料庫控制台
http://localhost:8080/actuator Spring Actuator

攻擊腳本

攻擊腳本位於 scripts/exploits/ 目錄:

# 安裝相依套件
pip install requests

# A01 - IDOR 攻擊
python scripts/exploits/a01_idor.py --target http://localhost:8080 --start 1 --end 10

# A03 - SQL Injection
python scripts/exploits/a03_sqli.py --target http://localhost:8080

# A03 - Command Injection
python scripts/exploits/a03_command_injection.py --target http://localhost:8080

# A05 - XXE
python scripts/exploits/a05_xxe.py --target http://localhost:8080

# A06 - Log4Shell
python scripts/exploits/a06_log4shell.py --target http://localhost:8080 --attacker YOUR_IP

# A10 - SSRF
python scripts/exploits/a10_ssrf.py --target http://localhost:8080 --category aws_metadata

📸 自動化截圖工具

本項目包含完整的截圖自動化工具,可自動捕獲所有 OWASP 演示的截圖。

快速使用

# 一鍵運行(推薦)
./scripts/run_all_screenshots.sh

# 或分步運行
python3 scripts/capture_all_screenshots.py      # Web 界面截圖(32 張)
python3 scripts/capture_terminal_outputs.py     # 終端輸出截圖(9 張)
python3 scripts/update_screenshot_references.py # 更新文檔引用

截圖輸出

  • 總計: 41 張高質量 PNG 截圖(3.8 MB)
  • Web 界面: 32 張 (1920x1200 分辨率)
  • 終端輸出: 9 張 (帶語法高亮)

截圖保存在:

  • docs/attacks/screenshots/ - Web 界面截圖
  • docs/attacks/screenshots/terminal/ - 終端輸出截圖

詳細文檔

安全掃描

OWASP Dependency-Check

# 掃描相依套件漏洞
./scripts/dependency-check.sh

# 或使用 Maven
./mvnw org.owasp:dependency-check-maven:check

OWASP ZAP

# 使用 Docker 執行 ZAP 掃描
./scripts/zap-scan.sh http://localhost:8080

專案結構

main 分支(學生版)

demo_java_va/
├── owasp-demo-api/          # Domain + Application 層 (介面定義)
│   └── src/main/java/com/demo/
│       ├── domain/          # DDD Domain 層
│       │   ├── user/        # User Bounded Context
│       │   ├── product/     # Product Bounded Context
│       │   └── file/        # File Bounded Context
│       └── application/     # Application 層 (Use Cases)
│
├── owasp-demo-vulnerable/   # Infrastructure 層 (漏洞實作)
│   └── src/main/java/com/demo/infrastructure/
│       ├── persistence/     # 資料存取(SQL Injection)
│       ├── security/        # 安全相關(弱加密、權限)
│       ├── external/        # 外部服務(SSRF、命令注入)
│       ├── xml/             # XML 解析(XXE)
│       ├── serialization/   # 序列化(反序列化漏洞)
│       └── logging/         # 日誌(Log Injection)
│
├── owasp-demo-web/          # Interfaces 層 (Controllers + UI)
│   └── src/main/java/com/demo/
│       ├── interfaces/rest/ # REST API
│       └── interfaces/web/  # Web 頁面(Thymeleaf + Bootstrap)
│
├── scripts/                 # 工具腳本
│   ├── exploits/            # Python 攻擊腳本
│   ├── attacks/iot/         # IoT 攻擊腳本
│   ├── dependency-check.sh  # 相依套件掃描
│   └── zap-scan.sh          # ZAP 安全掃描
│
├── docs/                    # 文件
│   ├── HANDOVER.md          # 開發交接文件
│   └── IoT_OWASP_Attack_Tutorial.md
│
├── Dockerfile
├── docker-compose.yml
└── README.md

secure 分支(教師版)

額外包含:

├── owasp-demo-secure/       # Infrastructure 層 (安全實作) ⭐ NEW
│   └── src/main/java/com/demo/infrastructure/
│       ├── security/secure/ # 安全版本的加密、權限控制
│       ├── persistence/secure/ # PreparedStatement 防 SQL Injection
│       └── ...              # 其他安全實作

差異說明:

  • main 分支:僅包含 3 個模組(學生無法看到安全實作)
  • secure 分支:包含 4 個模組(多了 owasp-demo-secure
  • 使用 Spring @Profile("vulnerable")@Profile("secure") 切換實作

分支策略 🔄

📚 main 分支(學生版)

  • 目的:供學生學習和實驗的漏洞展示版本
  • 包含模組
    • owasp-demo-api(介面定義)
    • owasp-demo-vulnerable(漏洞實作)
    • owasp-demo-web(Web 介面)
  • 特點:學生無法看到安全修復的程式碼

🔒 secure 分支(教師版)

  • 目的:供教師展示如何修復漏洞
  • 包含模組:main 分支的所有模組 + owasp-demo-secure(安全實作)
  • 特點:可以透過 Spring Profile 切換漏洞版/安全版

切換分支

# 查看當前分支
git branch

# 切換到安全版本(教師專用)
git checkout secure

# 切換回學生版本
git checkout main

執行模式切換

# 學生模式(使用漏洞實作)
docker-compose up
#
SECURITY_MODE=vulnerable docker-compose up

# 教師模式(需先切換到 secure 分支)
git checkout secure
SECURITY_MODE=secure docker-compose up

# 或使用 Maven Profile
mvn clean package -Psecure
java -jar -Dspring.profiles.active=secure owasp-demo-web/target/*.jar

教學建議 📖

推薦教學流程

第一階段:漏洞展示(main 分支)

  1. 啟動應用:使用 docker-compose up 啟動漏洞版本
  2. 實際攻擊:使用 scripts/exploits/ 中的攻擊腳本
  3. 理解危害:展示攻擊成功後的影響(資料外洩、權限提升等)

第二階段:程式碼分析

  1. 閱讀漏洞程式碼:引導學生找出 owasp-demo-vulnerable/ 中的問題
  2. 討論根本原因:為什麼會產生這個漏洞?
  3. 腦力激盪:如果你是開發者,會如何修復?

第三階段:安全修復(secure 分支)

  1. 切換分支git checkout secure
  2. 對比程式碼:使用 diff 工具比較漏洞版與安全版
    # 比較特定檔案
    git diff main secure -- owasp-demo-vulnerable/src/main/java/com/demo/infrastructure/security/vulnerable/VulnerableCryptoService.java
  3. 學習修復技巧:理解使用了哪些安全機制
  4. 啟動安全版SECURITY_MODE=secure docker-compose up

第四階段:驗證修復效果

  1. 重新攻擊:使用相同的攻擊腳本
  2. 觀察差異:攻擊失敗,應用記錄了攻擊行為
  3. 分析日誌:查看安全日誌如何記錄攻擊嘗試

進階教學活動

  • CTF 挑戰:讓學生在限時內找出並利用漏洞
  • 程式碼審查競賽:找出最多漏洞的小組獲勝
  • 修復練習:給學生漏洞程式碼,要求自己修復
  • 安全掃描實作:使用 OWASP Dependency Check 和 ZAP

一鍵啟動漏洞版本

./scripts_demo/quick_start.sh vulnerable

一鍵啟動安全版本

./scripts_demo/quick_start.sh secure

並排比較

./scripts_demo/run_comparison_demo.sh

停止所有

./scripts_demo/stop_all.sh

License

MIT License - 僅供教學用途

參考資源

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors